package com.codeplatform.dto;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;

import java.time.LocalDateTime;

/**
 * 认证响应DTO
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class AuthResponse {
    
    /**
     * 访问令牌
     */
    private String accessToken;
    
    /**
     * 刷新令牌
     */
    private String refreshToken;
    
    /**
     * 令牌类型
     */
    private String tokenType = "Bearer";
    
    /**
     * 访问令牌过期时间（秒）
     */
    private Long expiresIn;
    
    /**
     * 刷新令牌过期时间（秒）
     */
    private Long refreshExpiresIn;
    
    /**
     * 用户信息
     */
    private UserInfo userInfo;
    
    /**
     * 权限列表
     */
    private String[] permissions;
    
    /**
     * 响应时间
     */
    private LocalDateTime timestamp = LocalDateTime.now();
    
    /**
     * 用户信息内部类
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public static class UserInfo {
        /**
         * 用户ID
         */
        private Long id;
        
        /**
         * 用户名
         */
        private String username;
        
        /**
         * 昵称
         */
        private String nickname;
        
        /**
         * 邮箱
         */
        private String email;
        
        /**
         * 头像URL
         */
        private String avatar;
        
        /**
         * 用户角色
         */
        private String role;
        
        /**
         * 用户状态
         */
        private String status;
        
        /**
         * 邮箱是否已验证
         */
        private Boolean emailVerified;
        
        
        /**
         * 创建时间
         */
        private LocalDateTime createdAt;
        
        /**
         * 最后登录时间
         */
        private LocalDateTime lastLoginAt;
    }
    
    /**
     * 创建成功响应
     */
    public static AuthResponse success(String accessToken, String refreshToken, 
                                     Long expiresIn, Long refreshExpiresIn, 
                                     UserInfo userInfo) {
        return AuthResponse.builder()
                .accessToken(accessToken)
                .refreshToken(refreshToken)
                .tokenType("Bearer")
                .expiresIn(expiresIn)
                .refreshExpiresIn(refreshExpiresIn)
                .userInfo(userInfo)
                .timestamp(LocalDateTime.now())
                .build();
    }
    
    /**
     * 创建令牌刷新响应
     */
    public static AuthResponse refreshSuccess(String accessToken, Long expiresIn) {
        return AuthResponse.builder()
                .accessToken(accessToken)
                .tokenType("Bearer")
                .expiresIn(expiresIn)
                .timestamp(LocalDateTime.now())
                .build();
    }
}